package com.lz.timer.an.config;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 作业配置 实体
 *
 * @author liuzhangcheng
 * @version 1.0
 * @date 2018-07-10
 */
@Getter
@Setter
@ToString
public class BaseJobConfigBean {

    // ============== JobCoreConfiguration ====================

    /**
     * 作业名称
     */
    private String jobName = "";

    /**
     * 执行时间规则
     */
    private String cron = "";

    /**
     * 分片数
     */
    private int shardingTotalCount = 1;

    /**
     * 分片项目参数
     */
    private String shardingItemParameters = "";

    /**
     * 描述
     */
    private String description = "";

    /**
     * 设置作业自定义参数.可以配置多个相同的作业, 但是用不同的参数作为不同的调度实例.
     */
    private String jobParameter = "";

    /**
     * 是否开启失效转移
     */
    private boolean failover = false;

    /**
     * 是否开启错过任务重新执行
     */
    private boolean misfire = true;

    // ============== JobTypeConfiguration ====================

    /**
     * 作业实现类名称
     */
    private String jobClass = "";

    /**
     * 是否流式处理数据
     * 如果流式处理数据, 则fetchData不返回空结果将持续执行作业
     * 如果非流式处理数据, 则处理数据完成后作业结束
     */
    private boolean streamingProcess = false;

    /**
     * 脚本型作业执行命令行
     */
    private String scriptCommandLine = "";

    // ============== LiteJobConfiguration ====================

    /**
     * 设置本地配置是否可覆盖注册中心配置.
     * 如果可覆盖，每次启动作业都以本地配置为准
     */
    private boolean overwrite = false;

    /**
     * 作业是否禁止启动
     * 可用于部署作业时，先禁止启动，部署结束后统一启动
     */
    private boolean disabled = false;

    /**
     * 作业监控端口
     * 建议配置作业监控端口, 方便开发者dump作业信息。
     * 使用方法: echo "dump" | nc 127.0.0.1 9888
     */
    private int monitorPort = -1;

    /**
     * 监控作业运行时状态
     * 每次作业执行时间和间隔时间均非常短的情况，建议不监控作业运行时状态以提升效率。因为是瞬时状态，所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取，应在作业中实现幂等性。
     * 每次作业执行时间和间隔时间均较长的情况，建议监控作业运行时状态，可保证数据不会重复选取。
     */
    private boolean monitorExecution = true;

    /**
     * 修复作业服务器不一致状态服务调度间隔时间，配置为小于1的任意值表示不执行修复. 单位：分钟
     */
    private int reconcileIntervalMinutes = 10;

}
